gpt4 book ai didi

c++ - 将数据发送到另一个表单上的小部件

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:31 24 4
gpt4 key购买 nike

这个主题与这个主题相关:

Qt Creator 2.8.1 Qt 5.1.1 Qt Designer Linux Show a new Form

所以我创建了一些新对象:

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

DialogPreviewHeader PreviewHeader;
Ui_DialogPreviewHeader UIDialog;

然后像这样使用它们:

void MainWindow::on_pushButtonPreviewHeader_clicked()
{
QString SendTxt = ui->lineEditClassName->text();

UIDialog.textBrowserPreviewHeaderFile->setPlainText(SendTxt);
PreviewHeader.show();

}

以前,显示表单有效,现在它似乎因使用 UIDialog 而崩溃。 textBrowserPreviewHeaderFile 指针在 Ui_DialogPreviewHeader 类中设置,调试时不为空。

另一个问题是学习如何将 mainWidget 和 Form 与 Slots 连接起来。

编辑:

当我这样做时:

void MainWindow::on_pushButtonPreviewHeader_clicked()
{
QString SendTxt = ui->lineEditClassName->text();



//UIDialog.textBrowserPreviewHeaderFile->setPlainText(SendTxt);
PreviewHeader.ui->textBrowserPreviewHeaderFile->setPlainText(SendTxt);
//PreviewHeader->ui->textBrowserPreviewHeaderFile->setPlainText(SendTxt);

//pushButtonPreviewHeader(SendTxt);
PreviewHeader->show();

各种组合不编译:

-> -PreviewHeader 不是指针.ui - 'Ui::DialogPreviewHeader* DialogPreviewHeader::ui' 是私有(private)的

使 PreviewHeader 成为一个指针并使用 -> 形式也表示 DialogPreviewHeader::ui' 是私有(private)的。

我也尝试过实现一个插槽,但是围绕 MainWindow 到 DialogPreviewHeader 的另一种方式:

DialogPreviewHeader::DialogPreviewHeader(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogPreviewHeader)
{
ui->setupUi(this);
connect(
&MainWindow,
SIGNAL(pushButtonPreviewHeader(QString)),
this,
SLOT(ReceiveDataFromMainWidget(QString)));
}

但它不喜欢 &MainWindow

无论如何 - 如果我发布所有代码会更好吗?我应该摆脱这个编辑并将其发布在这里,还是再做一个问题?

好的 - 这是所有代码 - 将来我会在开始时这样做!!

#ifndef DIALOGPREVIEWHEADER_H
#define DIALOGPREVIEWHEADER_H

#include <QDialog>

namespace Ui {
class DialogPreviewHeader;
}

class DialogPreviewHeader : public QDialog
{
Q_OBJECT

public:
explicit DialogPreviewHeader(QWidget *parent = 0);
~DialogPreviewHeader();



private slots:
void on_buttonBox_accepted();

void ReceiveDataFromMainWidget(QString);

private:
Ui::DialogPreviewHeader *ui;
};

#endif // DIALOGPREVIEWHEADER_H

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "DialogPreviewHeader.h"
#include "ui_DialogPreviewHeader.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

//DialogPreviewHeader PreviewHeader;
//Ui_DialogPreviewHeader UIDialog;

private slots:
void on_pushButtonPreviewHeader_clicked();

void pushButtonPreviewHeader(QString);

void on_pushButtonPreviewImplFile_clicked();

void on_pushButtonWriteFiles_clicked();

void on_lineEditNSNames_textChanged(const QString &arg1);

void on_radioButtonNSIndividual_clicked();

void on_radioButtonOneNSAlias_clicked();

void on_lineEditClassName_textChanged(const QString &Text);


void on_lineEditClassNamePrepend_textEdited(const QString &arg1);

void on_pushButtonCancel_clicked();

void on_checkBoxPrependCharClassName_clicked();

private:
Ui::MainWindow *ui;
DialogPreviewHeader *PreviewHeader;
//Ui_DialogPreviewHeader.textBrowserPreviewHeaderFile *pHeader;
//textBrowserPreviewHeaderFile *pHeader;
};

#endif // MAINWINDOW_H

DialogPreviewHeader.h

#include "DialogPreviewHeader.h"
#include "ui_DialogPreviewHeader.h"

#include "MainWindow.h"
#include "ui_MainWindow.h"

DialogPreviewHeader::DialogPreviewHeader(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogPreviewHeader)
{
ui->setupUi(this);
connect(
Ui::MainWindow,
SIGNAL(pushButtonPreviewHeader(QString)),
this,
SLOT(ReceiveDataFromMainWidget(QString)));
}

DialogPreviewHeader::~DialogPreviewHeader()
{
delete ui;
}



void DialogPreviewHeader::on_buttonBox_accepted()
{
this->hide();
}

主要.cpp

#include "MainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

主窗口.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButtonPreviewHeader_clicked()
{
QString SendTxt = ui->lineEditClassName->text();



//UIDialog.textBrowserPreviewHeaderFile->setPlainText(SendTxt);
//PreviewHeader.ui->textBrowserPreviewHeaderFile->setPlainText(SendTxt);
//PreviewHeader->ui->textBrowserPreviewHeaderFile->setPlainText(SendTxt);

pushButtonPreviewHeader(SendTxt);
PreviewHeader->show();

}

void MainWindow::pushButtonPreviewHeader(QString) {

}

void MainWindow::on_pushButtonPreviewImplFile_clicked()
{

}

void MainWindow::on_pushButtonWriteFiles_clicked()
{

}

void MainWindow::on_lineEditNSNames_textChanged(const QString &arg1)
{

}

void MainWindow::on_radioButtonNSIndividual_clicked()
{

}

void MainWindow::on_radioButtonOneNSAlias_clicked()
{

}

void MainWindow::on_lineEditClassName_textChanged(const QString &Text)
{

}

void MainWindow::on_lineEditClassNamePrepend_textEdited(const QString &arg1)
{

}

void MainWindow::on_pushButtonCancel_clicked()
{
this->close();
}

void MainWindow::on_checkBoxPrependCharClassName_clicked()
{

}

您需要表单还是 ui_ header ?

编译器输出:

04:48:04: Running steps for project ClassWiz...
04:48:04: Configuration unchanged, skipping qmake step.
04:48:04: Starting: "/usr/bin/make"
g++ -c -pipe -std=c++11 -Wall -Wextra -pedantic -g -Wall -W -D_REENTRANT -fPIE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.1.1/5.1.1/gcc_64/mkspecs/linux-g++ -I../ClassWiz -I/opt/Qt5.1.1/5.1.1/gcc_64/include -I/opt/Qt5.1.1/5.1.1/gcc_64/include/QtWidgets -I/opt/Qt5.1.1/5.1.1/gcc_64/include/QtGui -I/opt/Qt5.1.1/5.1.1/gcc_64/include/QtCore -I. -I. -I. -o DialogPreviewHeader.o ../ClassWiz/DialogPreviewHeader.cpp
../ClassWiz/DialogPreviewHeader.cpp: In constructor 'DialogPreviewHeader::DialogPreviewHeader(QWidget*)':
../ClassWiz/DialogPreviewHeader.cpp:12:26: error: expected primary-expression before ',' token
make: *** [DialogPreviewHeader.o] Error 1
04:48:05: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project ClassWiz (kit: Desktop Qt 5.1.1 GCC 64bit)
When executing step 'Make'
04:48:05: Elapsed time: 00:01.

最佳答案

下一行是不正确的:

 Ui_DialogPreviewHeader UIDialog;

你不能这样做。这行就足够了:

DialogPreviewHeader PreviewHeader;

而不是:

UIDialog.textBrowserPreviewHeaderFile->setPlainText(SendTxt);

使用这个:

 PreviewHeader->ui->textBrowserPreviewHeaderFile->setPlainText(SendTxt);

就您的第二个问题而言,如果您想将数据从小部件 (mynewwidget) 发送到主窗口,请尝试以下操作:

在您的小部件(头文件)中创建一个信号,例如:

信号: void myData(QString);

现在假设你想从小部件 (mynewwidget) 发送一个字符串数据到主窗口,现在就像一个简单的函数一样调用 myData,从你想在你的 mynewwidget 类中发送数据的地方,例如你想发送“你好”:

myData("Hello");

现在,在 MainWindow 类的构造函数中,您需要将信号 myData(QString) 连接到 MainWindow 的任何插槽,其签名与小部件类的信号相同。在主窗口的构造函数中,您需要为连接添加这一行:

connect(&mynewwidget,SIGNAL(myData(QString)),this,SLOT(myRData(QString)));

其中 myRData 是 MainWindow 中的一个插槽。插槽只是可以直接调用以及使用信号调用的函数。在主窗口类中,插槽将是这样的:

Slots:
myRData(QString);

现在,无论何时调用 myData,MyRData 也将被调用。请注意,信号没有函数体,您只能通过它们传递数据。

编辑:示例

#ifndef DIALOGPREVIEWHEADER_H
#define DIALOGPREVIEWHEADER_H

#include <QDialog>

namespace Ui {
class DialogPreviewHeader;
}

class DialogPreviewHeader : public QDialog
{
Q_OBJECT

public:
explicit DialogPreviewHeader(QWidget *parent = 0);
~DialogPreviewHeader();



private slots:
void on_buttonBox_accepted();

//void ReceiveDataFromMainWidget(QString); // not needed

public: // made public
Ui::DialogPreviewHeader *ui;
};

#endif // DIALOGPREVIEWHEADER_H

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "DialogPreviewHeader.h"
#include "ui_DialogPreviewHeader.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

DialogPreviewHeader PreviewHeader;

private slots:
void on_pushButtonPreviewHeader_clicked();

void pushButtonPreviewHeader(QString);

void on_pushButtonPreviewImplFile_clicked();

void on_pushButtonWriteFiles_clicked();

void on_lineEditNSNames_textChanged(const QString &arg1);

void on_radioButtonNSIndividual_clicked();

void on_radioButtonOneNSAlias_clicked();

void on_lineEditClassName_textChanged(const QString &Text);


void on_lineEditClassNamePrepend_textEdited(const QString &arg1);

void on_pushButtonCancel_clicked();

void on_checkBoxPrependCharClassName_clicked();

private:
Ui::MainWindow *ui;
//DialogPreviewHeader *PreviewHeader; not needed
//Ui_DialogPreviewHeader.textBrowserPreviewHeaderFile *pHeader;
//textBrowserPreviewHeaderFile *pHeader;
};

#endif // MAINWINDOW_H

DialogPreviewHeader.h

#include "DialogPreviewHeader.h"
#include "ui_DialogPreviewHeader.h"

//#include "MainWindow.h"//永远不要再这样做 //#include "ui_MainWindow.h"//这也是

DialogPreviewHeader::DialogPreviewHeader(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogPreviewHeader)
{
ui->setupUi(this);
/*connect( // never do this again
Ui::MainWindow,
SIGNAL(pushButtonPreviewHeader(QString)),
this,
SLOT(ReceiveDataFromMainWidget(QString)));*/
}

DialogPreviewHeader::~DialogPreviewHeader()
{
delete ui;
}



void DialogPreviewHeader::on_buttonBox_accepted()
{
this->hide();
}

主要.cpp

#include "MainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

主窗口.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButtonPreviewHeader_clicked()
{
QString SendTxt = ui->lineEditClassName->text();


//Make sure Ui::DialogPreviewHeader *ui; is public in dialogpreviewheader.h

PreviewHeader.ui->textBrowserPreviewHeaderFile->setPlainText(SendTxt);

   pushButtonPreviewHeader(SendTxt);
PreviewHeader->show();

}

void MainWindow::pushButtonPreviewHeader(QString) {

}

void MainWindow::on_pushButtonPreviewImplFile_clicked()
{

}

void MainWindow::on_pushButtonWriteFiles_clicked()
{

}

void MainWindow::on_lineEditNSNames_textChanged(const QString &arg1)
{

}

void MainWindow::on_radioButtonNSIndividual_clicked()
{

}

void MainWindow::on_radioButtonOneNSAlias_clicked()
{

}

void MainWindow::on_lineEditClassName_textChanged(const QString &Text)
{

}

void MainWindow::on_lineEditClassNamePrepend_textEdited(const QString &arg1)
{

}

void MainWindow::on_pushButtonCancel_clicked()
{
this->close();
}

void MainWindow::on_checkBoxPrependCharClassName_clicked()
{

}

关于c++ - 将数据发送到另一个表单上的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18932104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com