Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将数据发送到另一表单上的小部件_C++_Linux_Qt - Fatal编程技术网

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

C++ 将数据发送到另一表单上的小部件,c++,linux,qt,C++,Linux,Qt,本主题与本主题相关: 因此,我创建了一些新对象: class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); DialogPreviewHeader PreviewHeader; Ui_DialogPreviewHeader UIDialog; 然后像这样使用它们: void MainWind

本主题与本主题相关:

因此,我创建了一些新对象:

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();

}
Slots:
 myRData(QString);
以前显示表单工作,现在使用
UIDialog
似乎会崩溃。
TextBrowserPreviewHeader文件
指针是在
Ui\u对话框PreviewHeader
类中设置的,调试时不为空

另一个问题是学习如何连接mainWidget&一个带有插槽的表单

编辑:

当我这样做时:

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”是私有的

将PreviewHeader设置为指针并使用->表单还表示对话框PreviewHeader::ui'是私有的

我还尝试实现了一个插槽,但另一种方法是在主窗口周围实现DialogPreviewHeader:

DialogPreviewHeader::DialogPreviewHeader(QWidget *parent) :
   QDialog(parent),
   ui(new Ui::DialogPreviewHeader)
{
   ui->setupUi(this);
   connect(
       &MainWindow,
       SIGNAL(pushButtonPreviewHeader(QString)),
       this,
       SLOT(ReceiveDataFromMainWidget(QString)));
}
但是它不喜欢
&main窗口

无论如何,如果我把所有的代码都贴出来会更好吗。我应该摆脱这个编辑并将其发布在这里,还是再问一个问题

好的-这是所有的代码-以后我会从一开始就这样做

#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
main.cpp

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

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

   return a.exec();
}
#include "MainWindow.h"
#include <QApplication>

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

   return a.exec();
}
您需要表单还是ui_uu标题

编译器输出:

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类中的数据,例如,您想发送“hello”:

现在,在MainWindow类的构造函数中,您需要将signal myData(QString)连接到MainWindow的任何插槽,这些插槽具有与widget类的signal相同的签名。在主窗口的构造函数中,您需要添加以下连接行:

connect(&mynewwidget,SIGNAL(myData(QString)),this,SLOT(myRData(QString)));
其中myRData是主窗口中的一个插槽。插槽只是可以直接调用和使用信号的函数。在mainwindow类中,插槽如下所示:

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

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

}
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
//#包括“MainWindow.h”//不要再这样做 //#也包括“ui_main window.h”//this

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();
}
main.cpp

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

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

   return a.exec();
}
#include "MainWindow.h"
#include <QApplication>

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

   return a.exec();
}
PreviewHeader.ui->文本浏览器PreviewHeader文件->设置明文(SendTxt)


如果这样编译,我猜
textbrowserviewWheaderfile
是一个公共字段吗?@nemanjabric是的,我再次将其设置为私有字段。这对未来的访问者有何帮助?我对我的问题进行了编辑,以显示我在最后一个答案中遇到的问题。最后,我问是否最好只发布所有代码。有没有比在每行上放置4个空格来存放大量代码更简单的方法?@TheIesman是一个足够新的答案,或者我应该编辑您的代码。您不需要在小部件中设置接收数据槽,因为可以在mainwindow类中访问小部件元素。@管理员我已经编辑了您的代码,并用注释修复了它。太棒了-它工作起来很有魅力!!谢谢你所有的时间和努力。
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();
}
#include "MainWindow.h"
#include <QApplication>

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

   return a.exec();
}
#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
   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()
   {

   }