622 سوال

629 پاسخ

855 نظر

242 کاربر

به سامانه پرسش و پاسخ کیوت خوش آمدید, این سامانه به شما امکان می دهد پرسشهای خود را طرح نموده و در کوتاهترین زمان ، پاسخ خود را دریافت نمایید.

-قبل از سوال پرسیدن حتما جست و جو کنید.

-در صورتی که سوالی به شما کمک کرد و یا جوابی ، حتما به آن امتیاز مثبت دهید.

-در صورتی که سوالی پرسیدید و جواب خود را گرفتید حتما جواب را به عنوان بهترین جواب انتخاب کنید.

-از ارسال چند سوال در یک تاپیک جدا خودداری کنید.

-نام مناسب برای سوالات انتخاب کنید.

-برچسب مناسب برای سوالات انتخاب کنید.

-برای نوشتن کد کافی است کد را از ادیتور خود کپی و در ادیتور سایت الصاق کنید و با انتخاب کد کلید CTRL+K را فشار دهید.

-حتما قوانین و نکات دیگر را از اینجا بخوانید.

کلیک شدن روی دکمه‌ای در QTableWidget

+1 دیدگاه
57 بازدید

سلام
من یه QTableWidget دارم که یه ستونش همه دکمه هستن.
میخواستم ببینم چطوری میشه فهمید روی کدوم دکمه کلیک شده و براش slot ـی که میخوام رو بنویسم.

خیلی ممنون ;)

دکمه‌ها رو اینطوری اضافه کردم :

QPushButton *btnPlay = new QPushButton ();

ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, 1, btnPlay);

که این مراحل توی یه حلقه به طور دائم تکرار میشه. البته تعریف btnPlay توی فایل header ـه. برا کامل بودنش اینجا اوردمش! :D

سوال شده مرداد 22, 1392 در Qt Widgets  بوسیله ی mehdi (480 امتیاز)  
83% درصد پذیرش جواب ها

ویرایش شده مرداد 22, 1392 بوسیله ی mehdi

1 پاسخ

+1 دیدگاه
 
بهترین پاسخ

از کلاس QSignalMapper استفاده کن. به این صورته که به هر دکمه یه شناسه نسبت میدی زمانی که روی دکمه کلیک شد این کلاس signal mapper یه سیگنال به نام mapped امیت میکنه با پارامتر اون شناسه ای که گفته بودی برای هر دکمه . مثالش از اسیستنت :

ButtonWidget::ButtonWidget(QStringList texts, QWidget *parent)
    : QWidget(parent)
{
    signalMapper = new QSignalMapper(this);

    QGridLayout *gridLayout = new QGridLayout;
    for (int i = 0; i < texts.size(); ++i) {
        QPushButton *button = new QPushButton(texts[i]);
        connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
        signalMapper->setMapping(button, texts[i]);
        gridLayout->addWidget(button, i / 3, i % 3);
    }

    connect(signalMapper, SIGNAL(mapped(QString)),
            this, SIGNAL(clicked(QString)));

    setLayout(gridLayout);
}
پاسخ داده شده مرداد 22, 1392 بوسیله ی admin کیومن (23,310 امتیاز)  
انتخاب شده مرداد 22, 1392 بوسیله ی mehdi
سوال ادیت شد ;)
جواب ویرایش شد :))
الان این به هر دکمه‌ای یه text ـی میده. اگه دکمه‌های من یه آیکون داشته باشن فقط (همشون یه آیکون مشترک) بازم میشه اینجوری استفاده کرد ؟؟!! :-؟
بله. مهم تابع setMapping هستش که در واقع به هر دکمه یک ID نسبت میده که بعدا که سیگنال mapped امیت شد قابل شناسایی باشه کدوم دکمه فرستنده سیگنال بوده.
...