将事件/操作连接到 QPlainTextEdit
Connect event/action to QPlainTextEdit
我有一个包含QPlainTextEdit的QTabWidget
。我已经设法向 QTabWidget 添加了操作,以便每当打开新选项卡时,都会在新选项卡中添加新的 QPlainTextEdit。 请参阅代码。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPlainTextEdit>
#include <QMessageBox>
#include <QAction>
#include <QTextCursor>
#include <iostream>
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("Tilde");
current_tab = 1;
on_action_New_triggered();
ui->tabWidget->setTabsClosable(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_action_New_triggered()
{
QString newTab = "Tab " + QString::number(current_tab);
ui->tabWidget->addTab(new QPlainTextEdit, newTab);
ui->tabWidget->setCurrentIndex(current_tab - 1);
current_tab++;
editor = qobject_cast<QPlainTextEdit *>(ui->tabWidget->currentWidget());
editor->setFocus();
/*connect(editor->document(), SIGNAL(cursorPositionChanged(QTextCursor)),
this, SLOT(on_editor_cursorPositionChanged()));*/
}
void MainWindow::on_actionNew_document_triggered()
{
on_action_New_triggered();
}
void MainWindow::on_action_Exit_triggered()
{
QMessageBox msg;
msg.addButton(QMessageBox::Yes);
msg.addButton(QMessageBox::No);
msg.setText("Exit program?");
int selection = msg.exec();
if (selection == QMessageBox::Yes)
qApp->exit(0);
}
// highlight current line
void MainWindow::on_editor_cursorPositionChanged()
{
QTextEdit::ExtraSelection highlight;
highlight.cursor = editor->textCursor();
highlight.format.setProperty(QTextFormat::FullWidthSelection, true);
highlight.format.setBackground( QColor(240, 246, 217) );
QList<QTextEdit::ExtraSelection> extras;
extras << highlight;
editor->setExtraSelections(extras);
}
注释的代码给出编译器错误:
QMetaObject::connectSlotsByName: 没有匹配的信号 on_editor_cursorPositionChanged()
我已经在头文件中添加了该函数。
头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPlainTextEdit>
#include <QTextCursor>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_action_New_triggered();
void on_actionNew_document_triggered();
void on_action_Exit_triggered();
void on_editor_cursorPositionChanged();
private:
Ui::MainWindow *ui;
QPlainTextEdit *editor;
qint8 current_tab;
};
#endif // MAINWINDOW_H
会不会是你的老虎机签名是错误的?
/*connect(editor->document(), SIGNAL(cursorPositionChanged(QTextCursor)),
this, SLOT(on_editor_cursorPositionChanged()));*/
应该是?
connect(editor->document(), SIGNAL(cursorPositionChanged(QTextCursor)),
this, SLOT(on_editor_cursorPositionChanged(QTextCursor)));
此外,您用于该插槽的命名约定可能与您的手动连接冲突。Qt可能试图通过匹配名称来使用插槽上的connectSlotsByName
机制:on_<member>_<signal>
在这种情况下,该插槽on_editor_cursorPositionChanged()
的当前签名将与 QPlainTextEdit editor
成员匹配。然后,您使用错误的签名手动将文档连接到它。您可能应该创建另一个命名更正常的插槽docCursorPosChanged(QTextCursor)
相关文章:
- QPlainTextEdit 仅设置一行字体
- 文本颜色 QPlainTextEdit QT
- 如何将回调与qplaintExtedit更改连接
- 如何在Qt中将文本附加到QPlainTextEdit并保持滚动条稳定?
- 如何在显示时调整 QPlainTextEdit 小部件的大小
- 如何添加清除选项 t qplaintextedit
- QT设置了QplaintExtedIt的滚动区域,以匹配Anothers的滚动区域
- QPlainTextEdit-搜索文档到底,然后从头开始
- 如何在不添加换行符的情况下将文本附加到QPlainTextEdit,并保持滚动在底部
- 如何从qplaintextedit读取特定行
- 为什么在qplaintextedit中没有放大插槽
- 将引用 qplaintextEdit 发送到构造函数类C++
- 如何从qplaintExtedIt获取文本颜色
- QPlainTextEdit dragEnterEvent 不接受 text/uri-list mime 类型
- 在 QPlainTextEdit 的第 80 列中画一条线
- QPlainTextEdit - 绝对大小
- 将事件/操作连接到 QPlainTextEdit
- 如何使用颜色将QPlainTextEdit内容渲染到QPixmap
- QPlainTextEdit-手动推入撤消堆栈
- 用数据轰炸时优化QPlainTextEdit小部件