使用Qt的标尺选择栏

时间:2015-02-23 07:43:59

标签: c++ qt

我想在Qt做一个统治者。我正在开发一个需要行编辑的应用程序,用户可以在其中选择字符串的任何部分。选择完成后,选择的开始和结束坐标将传递到后端。

使用行编辑显示的标尺在字符串中具有一个字符或空格的精度。 我前段时间使用Java和ExtJS构建了一个类似的小部件。我试图用Qt模拟相同的时间,但是没有成功。

请查看图片以了解它的外观。我想知道Qt中是否可能。如果有可能我应该使用哪个小部件来实现它?

enter image description here

1 个答案:

答案 0 :(得分:0)

我不是100%确定我正确理解你的问题。 您可以编写一个继承自QLineEdit的类,以便在其选择发生变化时发出信号。

下面是这样一个类的简单示例:它接受本机信号selectionChanged并且有两个新信号,它们发出有关已更改文本的信息,以显示可能的内容。我还包括一个简单的对话框类来展示如何使用它(即使它只是粗略的方式)。

<强> lineedit.h

#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H

#include <QLineEdit>

class LineEdit: public QLineEdit
{
  Q_OBJECT

    public:
  LineEdit(QWidget *parent = 0): QLineEdit(parent)
  {
    connect(this, SIGNAL(selectionChanged()), this, SLOT(textSelectionChanged() ));
  }

  public slots:
  void textSelectionChanged() {
    emit selectionChanged(this->selectedText());
    emit selectionChanged(this->selectionStart(), this->selectedText().length() );
  }

  signals:

  void selectionChanged(const QString&);
  void selectionChanged(int , int );

};

#endif

<强> dialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>
#include <QtCore>

class Dialog : public QDialog
{
  Q_OBJECT

    public:
  Dialog(QWidget *parent = 0) : QDialog(parent) {}

  public slots:
  void textChanged(const QString &string) {
    qDebug() << string;
  }

  void textChanged(int start, int length) {
    qDebug() << "Start"<< start << ", length: " << length;
  }

};

#endif

main.cc (完整性)

#include <QApplication>

#include "dialog.h"
#include "lineedit.h"
#include <QHBoxLayout>

int main(int argc, char** argv)
{
  QApplication app(argc, argv);

  Dialog dialog;

  QHBoxLayout *layout = new QHBoxLayout(&dialog);
  LineEdit lineedit;

  layout->addWidget(&lineedit);

  QObject::connect(&lineedit,SIGNAL(selectionChanged(QString)), &dialog, SLOT(textChanged(QString)));
  QObject::connect(&lineedit,SIGNAL(selectionChanged(int,int)), &dialog, SLOT(textChanged(int,int)));


  dialog.show();

  return app.exec();

}

如果这有帮助,请告诉我。