标签: slot

Qt插槽可以用作普通方法吗?

我是Qt编程的新手.我得到发出信号的悬念,并用一个插槽捕捉信号,但是可以将插槽作为常规方法调用吗?

例如,在以下代码段中:

class someClass{
..
..
//method
    void emitsig1(int val)
    {
      emit sig1(val);
    }
public signals:
    void sig1(int a);
};

class someOtherClass{
..
..   
public slots:

    int onSig1(int a)
    {
    //some computation on a
    return a;
    }
};

int main(argc, char** argv){
..
..

someClass obj1 = new someClass();
someOtherClass obj2 = new someOtherClass();
int value = 10, result =0;
obj1.emitsig1(value);

QObject::connect(obj1, SIGNAL(sig1(int), obj2, SLOT(onSig1(int)));

int newvalue = 100;

//is it legal to do this, and if so, what value …
Run Code Online (Sandbox Code Playgroud)

qt signals slot

2
推荐指数
1
解决办法
630
查看次数

Qt:从文本连接信号和插槽

当对象名称,信号和插槽都在文本文件中指定时,如何连接2个对象的信号和插槽?

获取正确的对象名称不是问题,因为我可以轻松地遍历数组并将名称与文件中的位置进行比较,但必须有某种方式可以从文件中返回信号和插槽并在connect函数中使用它,如:

connect(rtnObj1(line),SIGNAL(rtnSignal(line)),rtnObj2(line),SLOT(rtnSlot(line)));
Run Code Online (Sandbox Code Playgroud)

其中rtn函数返回对象名称/信号/槽,"line"是文件中的当前QString行.

我所知道的唯一方法是通过对每个组合进行字面编码并将QStrings与if语句进行比较,但这将是非常繁琐的,因为组合的数量将非常高.

注意: 这里有一个简单的例子证明基本上是这个问题如何存在.

第1帧:4个QComboBoxes.第一个和第三个保持对象名称,第二个保持信号,第四个保持槽.每个项目当然都是这些列表中的QString.点击按钮会在文件中添加一个新行,写入从每个框中选择的文本.

第2帧:已经拥有所需的对象.读取文件时,它会将列表中定义的对象与已创建的对象进行匹配,并在文件描述时将它们连接起来.

基于文件保存的数据创建对象很容易,但是如何从文件创建/拉出信号和插槽?

编辑: 除非,是否能够像这样连接?

connect(objectA, "", objectB, "");
Run Code Online (Sandbox Code Playgroud)

因为我发现我的代码会像那样编译,但每当我尝试插入插槽或信号名称时,我只会收到如下错误:

QObject :: connect:使用SIGNAL宏绑定Tile :: clicked

c++ qt signals signals-slots slot

2
推荐指数
1
解决办法
2021
查看次数

Qt Mainwindow菜单信号

我是处理QMainWindow的"Core"对象.
Core.h代码

class Core : public QObject
{
    Q_OBJECT
public:
    explicit Core(QObject *parent = 0);
    ~Core();
    void appInit();
    int getAuth();

public slots:
    void appExit();

private slots:
    void appMenuTriggered(QAction *action);

private:
    void preInit();
    MainWindow *mwnd;
};
Run Code Online (Sandbox Code Playgroud)

Core.cpp代码

Core::Core(QObject *parent) : QObject(parent)
{
    qDebug() << "Core::Constructor called";
    preInit();
}

Core::~Core()
{
    delete mwnd;
    qDebug() << "Core::Destructor called";
}

int Core::getAuth()
{
    LoginDialog *login = new LoginDialog();
    int r = login->exec();
    delete login;
    return r;
}

void Core::appExit() // connected to qapplication aboutToQuit …
Run Code Online (Sandbox Code Playgroud)

qt connect signals-slots slot

1
推荐指数
1
解决办法
4131
查看次数

Qt connect()SLOT和"this"指针

以下代码有效:

connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(myMemberFunction()));
Run Code Online (Sandbox Code Playgroud)

那另一个不:

connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(this->myMemberFunction()));
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ qt signals class slot

1
推荐指数
1
解决办法
1699
查看次数

c ++ qt QObject :: connect:没有这样的插槽

我已经像这样定义了我的插槽:

void choixPoints:: prendpixel1(Pixel depart)
{
//...
}
Run Code Online (Sandbox Code Playgroud)

我想执行以下句子:

Pixel depart= picmou->define(); //definition of a pixel, well defined 
connect(chp3, SIGNAL(clicked()), this, SLOT(prendpixel1(Pixel depart)));
Run Code Online (Sandbox Code Playgroud)

但是,当我执行时,我获得:

QObject::connect: No such slot choixPoints::prendpixel1(Pixel depart)
Run Code Online (Sandbox Code Playgroud)

为什么我的插槽没有工作?

c++ qt connect slot

1
推荐指数
1
解决办法
9286
查看次数

QTimer.如果插槽比信号更多参数怎么办?

我正在写一个游戏.通过滴答计时器应该工作这个插槽.

void game_process::animate_cell(MainWindow* m, const std::string& s, double x,double y, size_t i, size_t j, const std::string& step)
{ 
    painter.begin(m);
    std::string ss("C:\\Users\\Vardan\\GAmes_lines\\res\\red_" + step + ".png");
    ss += s;
    const char* p = ss.c_str();    
    QImage image(p);
    RECT temp = cal

    culate_cell_rect(i, j);
    QRectF target(x, y, image.width(), image.height());
    painter.drawImage(target, image);
    painter.end();
    m->update(x + temp.x0, y + temp.y0, 60, 60);
}
, that's it,
Run Code Online (Sandbox Code Playgroud)

QTimer*timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(render_cell(MainWindow*m,const std :: string&s,double x,double y,size_t i,size_t j,const std :: string&step)) ); timer-> start();

但是你可以看到插槽比信号更多的参数,因此信号和插槽机制不起作用.该怎么办?这里鳕鱼 …

qt signals slot qtimer

1
推荐指数
1
解决办法
1919
查看次数

在 Qt 程序中显示实际时间

MainWindow's title 中显示实际时间(Hh:mm:ss)的简单方法是什么?使用插槽和信号技术。

time qt signals slot

1
推荐指数
1
解决办法
3551
查看次数

QT中的SIGNAL SLOT

我在VS2013中写了一个简单的QT计算器.我用信号released()来拨打我的插槽,但是我的插槽无法工作.也许我的信号从未触发过.我是QT的新手,我不知道我做错了什么.

我的班级有这个属性:

class Calculator : public QMainWindow
{
Q_OBJECT

public:
    Calculator(QWidget *parent = 0);
    ~Calculator();

private slots:
    void Calculator::two();
private:
    QLabel *lable;  
    QPushButton *two_button;
    QString value;
    QString total;
    int fnum;
    int snum;
    bool addbool;
    bool subtractbool;
    bool multiplybool;
    bool devidebool;
};
Run Code Online (Sandbox Code Playgroud)

这是我将信号连接到插槽的代码:

one_button = new QPushButton("2", this);

connect(two_button, SIGNAL(released()), this, SLOT(two()));
Run Code Online (Sandbox Code Playgroud)

我的插槽是

void Calculator::two()
{
    value = value+"2";
    lable->setText(value);
}
Run Code Online (Sandbox Code Playgroud)

我在我的插槽中放了一个断点,但它从未到达断点.

c++ qt signals slot

1
推荐指数
1
解决办法
241
查看次数

连接子窗口小部件插槽上的信号

我在小部件和连接插槽中的继承方面存在一些问题.我创建了一个继承自的Widget QWidget.这是原型:

class WidgetParams : public QWidget
{
   Q_OBJECT
 public:
     explicit WidgetParams(QWidget *parent = 0) : QWidget(parent){}
     virtual bool paramChanged() = 0;
 protected:
      bool paramsChanged;
 };
Run Code Online (Sandbox Code Playgroud)

然后我创建了派生类WidgetParams,例如WidgetParamsWindows:

class WidgetParamsWindows : public WidgetParams
{
  public:
    explicit WidgetParamsWindows(QWidget *parent = 0);
    virtual bool paramChanged(){return paramsChanged;}
  private:
    QFormLayout *layout;
    QSpinBox *svertical;
    QSpinBox *shorizontal;
  signals:

  public slots:
    void changeSomeParam(int value);
};
Run Code Online (Sandbox Code Playgroud)

WidgetParamsWindows,我有一些QSpinBox,QPushButton等调整参数.

我像这样连接QSpinBoxin WidetParamsWindows:

connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(changeSomeParam(int));
Run Code Online (Sandbox Code Playgroud)

之后我创建了一个WidgetParamsWindows并将其放入一个列表中WidgetParams,以便 …

c++ qt slot

0
推荐指数
1
解决办法
679
查看次数

CLOS插槽访问器:读取但不写入

我有一个CLOS对象的插槽名称列表:

(DEFCLASS TRIAL-DATA (STANDARD-OBJECT) 
 ((A-DATUM :ACCESSOR A-DATUM :INITARG :A-DATUM :INITFORM NIL) 
  (BOTH-DATA :ACCESSOR BOTH-DATA :INITARG :BOTH-DATA :INITFORM 0) 
  (CUMULATIVE-DATA :ACCESSOR CUMULATIVE-DATA :INITARG :CUMULATIVE-DATA :INITFORM NIL) 
  (NAME :ACCESSOR NAME :INITARG :NAME :INITFORM VALUE)))

(let* ((td (make-instance 'trial-data))
   (slot-lst (mapcar #'slot-definition-name (class-slots (class-of td)))))
Run Code Online (Sandbox Code Playgroud)

我可以读取这些插槽的值:

(let* ((td (make-instance 'trial-data))
   (slot-lst (mapcar #'slot-definition-name (class-slots (class-of td)))))
(funcall (symbol-function (nth 0 slot-lst)) td))
Run Code Online (Sandbox Code Playgroud)

==>无

但为什么我不能为这些插槽写新值?我的类试验数据定义是否应该为每个插槽创建一个访问器功能?

;; Should set the first slot, a-datum's, value to 42
(let* ((td (make-instance 'trial-data))
       (slot-lst (mapcar #'slot-definition-name (class-slots (class-of …
Run Code Online (Sandbox Code Playgroud)

lisp accessor common-lisp clos slot

0
推荐指数
1
解决办法
418
查看次数

为什么CLOS插槽可以不绑定?

据说,只有Common Lisp中的特殊变量才能解除绑定.对于所有词汇变量,默认值为nil.我认为类槽存在于封闭之类的东西中,但显然它们不存在.

如果我定义一个没有:initform参数的CLOS插槽(希望它们将被绑定nil)并且在创建实例时不提供值,我将获得一个带有未绑定插槽的实例.为什么会这样?这不方便.

lisp common-lisp clos slot

0
推荐指数
2
解决办法
602
查看次数

标签 统计

slot ×11

qt ×9

signals ×6

c++ ×5

clos ×2

common-lisp ×2

connect ×2

lisp ×2

signals-slots ×2

accessor ×1

class ×1

qtimer ×1

time ×1