首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将事件/操作连接到QPlainTextEdit

将事件/操作连接到QPlainTextEdit
EN

Stack Overflow用户
提问于 2012-04-22 17:49:06
回答 1查看 1.2K关注 0票数 1

我有一个QTabWidget,它包含一个QPlainTextEdit。我设法将操作添加到QTabWidget中,以便每当打开一个新选项卡时,新选项卡中也会添加一个新的QPlainTextEdit。见代码。

代码语言:javascript
复制
#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()没有匹配信号

我已经在头文件中添加了这个函数。

头文件:

代码语言:javascript
复制
#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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-22 18:07:06

会不会是你的插槽签名不对?

代码语言:javascript
复制
/*connect(editor->document(), SIGNAL(cursorPositionChanged(QTextCursor)),
            this, SLOT(on_editor_cursorPositionChanged()));*/

应该是吗?

代码语言:javascript
复制
connect(editor->document(), SIGNAL(cursorPositionChanged(QTextCursor)),
            this, SLOT(on_editor_cursorPositionChanged(QTextCursor)));

此外,您为该插槽使用的命名约定在这里可能与手动连接相冲突。Qt可能试图通过匹配名称:connectSlotsByName在插槽上使用on_<member>_<signal>机制。

在这种情况下,该时隙on_editor_cursorPositionChanged()的当前签名将与QPlainTextEdit editor成员匹配。然后用错误的签名手动地将文档连接到它。您可能应该创建另一个名为docCursorPosChanged(QTextCursor)的插槽。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10270470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档