• 5714阅读
  • 4回复

大神,关于信号和槽 [复制链接]

上一主题 下一主题
离线beefliu
 

只看楼主 倒序阅读 楼主  发表于: 2010-09-25
— 本帖被 XChinux 执行加亮操作(2010-10-20) —
我自定义一个widget
widget下有label,pushbutton
我定义了一个槽
当点击pushbutton时,改变label显示的值
程序能运行,但一点击pushbutton就出错


QObject::connect(link,SIGNAL(clicked()),this,SLOT(linkSqlData()));


void MyWidget::linkSqlData()
{
    link->setEnabled(false);
    text->setText("<font style='color:red;'>数据库连接中...</font>");
}

link是pushbutton
text是label
帮忙下


还有我用ui的话就不出现这样的问题了
很纳闷啊
学习中···
离线xtfllbl

只看该作者 1楼 发表于: 2010-09-25
程序能运行,但一点击pushbutton就出错

什么错?段错误?就这几句话貌似没什么问题。
上海欢迎您
离线beefliu

只看该作者 2楼 发表于: 2010-09-25
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QtSql>
#include <QTimer>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>

class MyWidget : public QWidget {
    Q_OBJECT
public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();

private slots:
    void linkSqlData();
    void sql();
private:
    QLabel *text;
    QPushButton *link;
    QPushButton *addVideo;
    QPushButton *addMatch;

    void init();  
};

#endif // MYWIDGET_H


#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
{
    this->setWindowTitle("***网站管理");
    this->setFixedSize(200,100);

    QLabel *text = new QLabel("数据库未连接",this);
    QPushButton *link = new QPushButton("连接数据库",this);
    QPushButton *addVideo = new QPushButton("添加视频",this);
    QPushButton *addMatch = new QPushButton("添加比赛",this);

    addVideo->setFixedSize(60,30);
    addMatch->setFixedSize(60,30);

    QHBoxLayout *hlayout = new QHBoxLayout;
    QVBoxLayout *vlayout = new QVBoxLayout;

    vlayout->addWidget(text);
    vlayout->addWidget(link);
    vlayout->setAlignment(Qt::AlignHCenter);
    hlayout->addWidget(addVideo);
    hlayout->addWidget(addMatch);
    vlayout->addLayout(hlayout);
    this->setLayout(vlayout);

    QObject::connect(link,SIGNAL(clicked()),this,SLOT(linkSqlData()));
}

MyWidget::~MyWidget()
{

}

void MyWidget::init()
{

}

void MyWidget::linkSqlData()
{
    link->setEnabled(false);
    text->setText("<font style='color:red;'>数据库连接中...</font>");
    QTimer::singleShot(6,this,SLOT(sql()));
}

void MyWidget::sql()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("***.***.***.***");
    db.setDatabaseName("1234");
    db.setUserName("1234");
    db.setPassword("1234");
    bool ok = db.open();
    if(ok)
    {
        text->setText("<font style='color:red;'>数据库连接成功</font>");
    }
    else
    {
        text->setText("<font style='color:red;'>数据库连接成功</font>");
        //link->setEnabled(true);
    }
}
学习中···
离线dbzhang800

只看该作者 3楼 发表于: 2010-09-25
C ++ 基本概念不清:

    QLabel *text = new QLabel("数据库未连接",this);
    QPushButton *link = new QPushButton("连接数据库",this);
    QPushButton *addVideo = new QPushButton("添加视频",this);
    QPushButton *addMatch = new QPushButton("添加比赛",this);

这四个不是你头文件内定义的那四个类成员
离线beefliu

只看该作者 4楼 发表于: 2010-09-25
楼上正解啊

学习不精
学习中···
快速回复
限100 字节
 
上一个 下一个