我想在Qt做一个统治者。我正在开发一个需要行编辑的应用程序,用户可以在其中选择字符串的任何部分。选择完成后,选择的开始和结束坐标将传递到后端。
使用行编辑显示的标尺在字符串中具有一个字符或空格的精度。 我前段时间使用Java和ExtJS构建了一个类似的小部件。我试图用Qt模拟相同的时间,但是没有成功。
请查看图片以了解它的外观。我想知道Qt中是否可能。如果有可能我应该使用哪个小部件来实现它?
答案 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();
}
如果这有帮助,请告诉我。