explicit chat(QString accountNumber,QString accountName,MainWindow * main,QWidget *parent = 0); chat::chat(QString accountNumber,QString accoutName,MainWindow * main,QWidget *parent) : QWidget(parent), ui(new Ui::chat) { ui->setupUi(this); QVBoxLayout* layout = new QVBoxLayout(this); // 添加其他控件到布局中 setLayout(layout); ui->label->setText(accoutName); this->otherAccountName = accoutName; this->otherAccountNumber = accountNumber; tcpClient=new QTcpSocket(this); //接收主窗口的消息信号 mainwindow = main; // connect(mainwindow,SIGNAL(sendChatData(QString)),this,SLOT(onSocketReadyRead(QString))); } void MainWindow::friendImageClicked(const QString& friendName) { // 处理好友头像点击的操作 //生成窗口 QString friendID = account.getFriendID(friendName); // 根据好友昵称获取账号ID QWidget *w = new QWidget(); chat * a = new chat(friendID,friendName,this,w); a->setAccountName(this->accountName); //本身账号 qDebug()<<friendID<<" "<<friendName; // connect(a,SIGNAL(sendData(QString)),this,SLOT(MainSendData(QString))); qDebug()<<"come here!"; this->hide(); a->show(); }chat类继承了QWidget类,在MainWindow类的函数中创建了chat类对象并调用show函数没有弹出新窗口
时间: 2024-04-11 09:33:31 浏览: 77
您好!根据您提供的代码,我看到您在MainWindow类的friendImageClicked函数中创建了chat类的一个对象a,并调用了show函数。但是,新窗口没有弹出的原因可能是因为您在创建chat类对象时,将父窗口的指针传递给了chat类的构造函数,即将`this`作为了chat类对象的父窗口。
这种情况下,chat类对象将被视为父窗口的一个子控件,而不是作为一个独立的窗口显示。要解决这个问题,您可以不将父窗口指针传递给chat类的构造函数,或者将父窗口指针设置为0(即空指针),这样chat类对象将作为一个独立的窗口显示。
请尝试修改代码如下:
```
QWidget *w = new QWidget();
chat * a = new chat(friendID,friendName,this); // 将父窗口指针设置为空指针或不传递
a->setAccountName(this->accountName); //本身账号
qDebug()<<friendID<<" "<<friendName;
// connect(a,SIGNAL(sendData(QString)),this,SLOT(MainSendData(QString)));
qDebug()<<"come here!";
this->hide();
a->show();
```
这样修改后,应该能够弹出新的chat类窗口。希望对您有所帮助!如果还有其他问题,请随时提问。
相关问题
#ifndef DONEWDIALOG_H #define DONEWDIALOG_H #include <QDialog> #include<QLineEdit> #include<QVBoxLayout> #include<QDialogButtonBox> class DonewDialog : public QDialog { Q_OBJECT public: explicit DonewDialog(QWidget *parent =0); ~DonewDialog(); int getWidth(); int getHeight(); QString getfileName(); QColor getBackColor(); protected: private slots: QLineEdit*numberEdit1; QLineEdit*numberEdit2; QLineEdit*numberEdit3; void on_toolButton_clicked(); private: //Ui::DonewDialog *ui; QColor backColor; QString fileName; signals: }; #endif // DONEWDIALOG_H
根据你提供的代码,你想要通过一个工具按钮(toolButton)来打开颜色对话框并选择背景颜色。以下是对代码进行的一些修改:
```cpp
#ifndef DONEWDIALOG_H
#define DONEWDIALOG_H
#include <QDialog>
#include <QColor>
class QLineEdit;
class DonewDialog : public QDialog
{
Q_OBJECT
public:
explicit DonewDialog(QWidget *parent = 0);
~DonewDialog();
int getWidth();
int getHeight();
QString getFileName();
QColor getBackColor();
private slots:
void on_toolButton_clicked();
private:
QLineEdit* numberEdit1;
QLineEdit* numberEdit2;
QLineEdit* numberEdit3;
QColor backColor;
QString fileName;
};
#endif // DONEWDIALOG_H
```
根据你的代码,我对 `DonewDialog` 类进行了一些修改。将 `QLineEdit` 的声明移动到 `private` 部分,并将 `on_toolButton_clicked()` 槽函数移到 `private slots` 部分。我还添加了一个前置声明 `class QLineEdit;`,以解决编译错误。
希望这对你有所帮助!如果还有其他问题,请随时提问。
这是我end.h内容#ifndef END_H #define END_H #include <QWidget> #include <QLabel> #include <QString> #include "barrier.h" namespace Ui { class end; } class end : public QWidget { Q_OBJECT public: explicit end(QWidget *parent = 0); ~end(); QString s; barrier b; private slots: void on_pushButton_clicked(); private: Ui::end *ui; }; #endif // END_H 这是end.cpp内容#include "end.h" #include "ui_end.h" #include <QLabel> #include <QString> #include "barrier.h" end::end(QWidget *parent) : QWidget(parent), ui(new Ui::end) { ui->setupUi(this); s="dhajkdhka"; s=b.score; ui->label_2->setText(s); } end::~end() { delete ui; } void end::on_pushButton_clicked() { close(); } 为什么分数无法显示
根据你提供的代码,我注意到在 `end.cpp` 中,你将 `s` 的值设置为 `"dhajkdhka"`,然后又将其赋值为 `b.score`。然而,从代码中看不出 `b` 对象是如何被初始化或赋值的。
如果 `b` 是 `barrier` 类的一个对象,并且 `score` 是该类的一个成员变量,那么你需要确保 `b` 对象已经被正确初始化,并且其 `score` 成员变量已经被正确赋值。
另外,请确保在 `end` 类中正确包含了 `barrier.h` 头文件,并且 `barrier` 类的定义与成员变量 `score` 是可访问的。
如果以上问题都没有解决你的问题,请提供更多与分数相关的代码,以便我们可以更好地帮助你找出问题所在。
阅读全文