单击QT按钮可更改明文外部编辑
QT button click to change plaintextedit
我对QT完全陌生。我写了一个小表单,有4个单选按钮、点击按钮和纯文本编辑字段(在QT Creator中)。我的目标是按下按钮,在明文中更改文本("此处有一些文本")。不幸的是,我找不到连接按钮和文本字段的正确公式,所以我遇到了一个错误,我还不知道。以下是代码(我省略了GUI XML部分):
主窗口.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QRadioButton>
#include <QPushButton>
#include <QPlainTextEdit>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QRadioButton radioButton,radioButton_2,radioButton_3,radioButton_4;
QPushButton pushButton;
QPlainTextEdit plainTextEdit;
};
#endif // MAINWINDOW_H
main.cpp:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
//#include <QPushButton>
//#include <QPlainTextEdit>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QObject::connect(pushButton,SIGNAL(clicked()),plainTextEdit,SLOT(on_pushButton_clicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
plainTextEdit.setPlainText("Some text here");
}
以下是错误输出:
/home/user/workspace/ButtonRadio/mainwindow.cpp:-1: In constructor 'MainWindow::MainWindow(QWidget*)':
/home/user/workspace/ButtonRadio/mainwindow.cpp:11: error: no matching function for call to 'MainWindow::connect(QPushButton&, const char*, QPlainTextEdit&, const char*)'
/home/user/workspace/ButtonRadio/mainwindow.cpp:11: candidates are:
/usr/include/qt4/QtCore/qobject.h:204: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
/usr/include/qt4/QtCore/qobject.h:204: note: no known conversion for argument 1 from 'QPushButton' to 'const QObject*'
/usr/include/qt4/QtCore/qobject.h:217: static bool QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType)
/usr/include/qt4/QtCore/qobject.h:217: note: no known conversion for argument 1 from 'QPushButton' to 'const QObject*'
/usr/include/qt4/QtCore/qobject.h:337: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
/usr/include/qt4/QtCore/qobject.h:337: note: no known conversion for argument 1 from 'QPushButton' to 'const QObject*'
如果我只写
QObject::connect(pushButton,SIGNAL(clicked()),SLOT(on_pushButton_clicked()));
然后错误输出略有变化,但本质仍然相同。我该如何解决这个问题?
--编辑--15.11.14-
主窗口.h:…
private:
Ui::MainWindow *ui;
QRadioButton *radioButton,*radioButton_2,*radioButton_3,*radioButton_4;
QPushButton *pushButton;
QPlainTextEdit *plainTextEdit;
};
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
pushButton(new QPushButton(this)),
plainTextEdit(new QPlainTextEdit(this))
{
ui->setupUi(this);
//pushButton = new QPushButton(this);
//plainTextEdit = new QPlainTextEdit(this);
QObject::connect(pushButton,SIGNAL(clicked()),plainTextEdit,SLOT(on_pushButton_clicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
plainTextEdit->setPlainText("Some text here");
}
结果,我得到了具有以下输出的SIGSEGV:
amember "1on_pushButton_clicked()" char *
asender @0x2 QObject
asignal "2clicked()" char *
atype Qt::AutoConnection(0) Qt::ConnectionType
this @0x7fffffffe640 QObject
它还指向qobject.h中的以下行:
339 { return connect(asender, asignal, this, amember, atype); }
349 T qFindChild(const QObject *o, const QString &name = QString());
350 QList<T> qFindChildren(const QObject *oobj, const QString &name = QString());
351 QList<T> qFindChildren(const QObject *o, const QRegExp &re);
由于connect
使用指针,所以会出现此错误。你应该使用指针:
QRadioButton *radioButton,*radioButton_2,*radioButton_3,*radioButton_4;
QPushButton *pushButton;
QPlainTextEdit *plainTextEdit;
使用指针时,每个.
都替换为->
。编译器告诉下一个错误的错误:
...(maybe you meant to use '->' ?) radioButton_2.show();
连接应为:
connect(pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));
或
connect(pushButton,SIGNAL(clicked()),SLOT(on_pushButton_clicked()));
关于未来:你也可以这样写:
QObject obj1;
QObject obj2;
connect(&obj1,SIGNAL(someSigna()),&obj2,SLOT(slot()));
如您所见,您需要&
您需要在非QObject
子类中编写QObject::connect
(例如在main.cpp
中)。在MainWindow
中,您可以只编写connect
此外,当您使用指针时,您应该使用new
来分配内存。例如:
pushButton = new QPushButton(this);//in constructor
//and so on
其中this
向我们显示this
(我们的MainWindow
)是父级,因此pushButton
将出现在MainWindow
中,而不是单独的窗口中。
我想我提到了这段代码中的所有重大错误。
on_pushButton_clicked()
是主窗口的插槽,不是一个明文的外部。下一步:
pushButton = new QPushButton(this);
plainTextEdit = new QPlainTextEdit(this);
connect(pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 在函数内部的声明中初始化数组,并在外部使用它
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 节俭并发:未解决的外部问题
- 如何在c++中从git建立外部库
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 编辑文件中的文本
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 有没有办法在整个项目中包含和链接外部库,只编辑我的顶级 CMakeList
- 无法编辑外部变量
- 在 GTKmm 中启动外部编辑器
- 单击QT按钮可更改明文外部编辑
- 如何在Qt/Android上的默认外部编辑器中打开文件