我的目标是将windowobject指针传递给另一个类。 我会告诉你到目前为止我得到了什么。 其中:"对话框"是通过的窗口。
mainwindow.cpp
dialog = new Dialog(this);
someClass(dialog);
某些类中的Konstruktor
someClass::someClass(Dialog *d)
{
Dialog *dia = d;
}
someClass.h
#include "dialog.h"
...
public:
someClass(Dialog *dialog)
//Dialog d;
该程序现在运行,但我不确定我是否实现了我想要的。 现在可以与我的对话框进行交互吗? 我想要的是这样的。
dia->ui->lineEdit->setText();
任何帮助都是适当的
答案 0 :(得分:2)
someClass(&dialog);
不正确...你有一个指针,并在函数中给出指针的地址(一个指向指针的指针)
你也有
Dialog d;
在标题中并为其分配Dialog*
。
答案 1 :(得分:0)
我们不知道您的Dialog
课程是什么样的,但如果其成员ui
是公开的(或someClass
是Dialog
的朋友),那么您应该能够做到
dia->ui->lineEdit->setText();
您是否收到编译错误?或者文本根本没有按预期显示? 您仍然需要使用
在某个时刻显示对话框dia->show();
或
dia->exec();
答案 2 :(得分:0)
我的目标是将windowobject指针传递给另一个类。生病 告诉你到目前为止我得到了什么。其中:“对话框”是要通过的窗口。
考虑你的代码:
someClass::someClass(Dialog *d)
{
Dialog *dia = d;
}
是构造函数someClass中的本地成员。因此它只在构造函数本身中具有作用域(在构造函数之外是不可见的,实际上,它不存在于构造函数之外(当构造函数超出作用域时会被销毁)。)
幸运的是dia是一个指针(对象的地址),而不是实际的对话框(因此只有指针,而不是它指向的对象超出范围)。如果您希望指针保留在作用域中以便稍后访问,则必须将其“绑定”到类的范围(使其成为类成员)。
class MyClass
{
public:
//Using reference as it may not be null...
MyClass( Dialog& dialog );
void showDialog();
private:
//We only want to expose a small part of dialog to users,
// hence keep it private, and expose what we want through
// the interface (the public part).
Dialog& dialog_;
};
//MyClass.cpp
MyClass::MyClass( QPointer<Dialog> )
: dialog_( dialog ) //Google "member initialisation"
{
}
void MyClass::showDialog(){ dialog_.show(); }
-----修改/补充答案-----
如果在上面的例子中dialog_是可选的,那么你不需要把它作为引用成员,因为引用成员需要初始化(一个不能有未初始化的引用)。在这种情况下,使它成为指针...当使用Qt时,我会使它成为QPointer(假设对话框是一个QObject),因为QPointers比原始指针更安全(它们总是初始化为零,至少)
我将告诉你现在保持简单的基本原则。阅读有关QPointers和智能指针的一般信息。
e.g:
class MyClass
{
public:
// May or may not hold zero...
explicit MyClass( Dialog* dialog = 0 );
void showDialog();
private:
//We only want to expose a small part of dialog to users,
// hence keep it private, and expose what we want through
// the interface (the public part).
Dialog* dialog_;
};
//.cpp
MyClass::MyClass( Dialog* dialog /* = 0*/ )
: dialog_( dialog )
{
}
void MyClass::showDialog()
{
if( dialog_ )
{
dialog_->show();
}
else
{
std::cout << "This is in fact not a dialog"
"\nbut be so kind as to enter"
" whatever you want here ;-)"
<< std::endl;
while( !terminated() )
{
std::string inputStr;
std::cin >> inputStr;
evalute( inputStr );
}
}
}